home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / SAT / SAT Invaders sample ƒ / sEnemy.p < prev    next >
Encoding:
Text File  |  1993-09-19  |  2.3 KB  |  96 lines  |  [TEXT/PJMM]

  1. {===============================================}
  2. {================= Enemy sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sEnemy;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Enemy object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22.         SAT, SoundConst, GameGlobals, sMissile;
  23.  
  24.     var
  25.         globalspeed: Point;
  26.         turnFlag: boolean;
  27.         lasth, downcount: integer;
  28.  
  29.     procedure InitEnemy;
  30.     procedure SetupEnemy (sp: SpritePtr);
  31.     procedure HandleEnemy (me: SpritePtr);
  32.  
  33. implementation
  34.  
  35.     var
  36.         enemyFace: array[1..6] of FacePtr;{BMPtr}
  37.  
  38.     procedure InitEnemy;
  39.         var
  40.             ii: integer;
  41.             h: Handle;
  42.     begin
  43.         for ii := 1 to 6 do
  44.             enemyFace[ii] := GetFace(127 + ii);
  45.         globalspeed.h := 5;
  46.         globalspeed.v := 0;
  47.         turnFlag := false;
  48.         lasth := 5;
  49.         downcount := 0;
  50.     end;
  51.  
  52.     procedure SetupEnemy (sp: SpritePtr);
  53.     begin
  54.         sp^.face := enemyFace[1];
  55.         sp^.mode := Rand(6) + 1; { icon number }
  56.         SetRect(sp^.hotRect, 2, 4, 30, 32);
  57. { Since enemies are only created at the beginning of each level, we re-initialize this stuff here:}
  58.         globalspeed.h := 5;
  59.         globalspeed.v := 0;
  60.         turnFlag := false;
  61.         lasth := 5;
  62.         downcount := 0;
  63.     end;
  64.  
  65.     procedure HandleEnemy (me: SpritePtr);
  66.         var
  67.             sp: Spriteptr;
  68.             divmed: integer;
  69.     begin
  70.         if me^.kind <> -3 then
  71.             begin
  72.                 me^.task := nil;
  73.                 SATSoundPlay(dunkH, 1, false);
  74.             end;
  75.  
  76.         me^.mode := me^.mode + 1;
  77.         if me^.mode = 7 then
  78.             me^.mode := 1;
  79.         me^.face := enemyFace[me^.mode];
  80.  
  81.         me^.position.h := me^.position.h + globalspeed.h;
  82.         me^.position.v := me^.position.v + globalspeed.v;
  83.  
  84.         if (me^.position.h < 0) or (me^.position.h > offSizeH - 32) then
  85.             turnflag := true;
  86.         if me^.position.v > offSizeV then
  87.             me^.task := nil;
  88.  
  89.         if Rand100 < 2 then
  90.             begin
  91.                 sp := NewSprite(-1, me^.position.h + 8, me^.position.v + 20, @HandleMissile, @SetupMissile, nil);
  92.                 SATSoundPlay(piuH, 1, false);
  93.             end;
  94.     end;
  95.  
  96. end.